package visiopuce.ui.view;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map.Entry;

import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.nebula.widgets.formattedtext.DateFormatter;
import org.eclipse.nebula.widgets.formattedtext.DoubleFormatter;
import org.eclipse.nebula.widgets.formattedtext.FormattedText;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.wb.swt.SWTResourceManager;

import visiopuce.ApplicationContexte;
import visiopuce.graph.ToolTipsDialog;
import visiopuce.objets.Alteration;
import visiopuce.objets.Annotation;
import visiopuce.objets.ControleQualite;
import visiopuce.objets.FeuillePuce;
import visiopuce.objets.MarquePuce;
import visiopuce.objets.Prelevement;
import visiopuce.objets.Puce;
import visiopuce.objets.TypeLogiciel;
import visiopuce.objets.TypePuce;
import visiopuce.objets.TypeQC;
import visiopuce.objets.Utilisateur;
import visiopuce.service.AlterationServiceImpl;
import visiopuce.service.DroitServiceImpl;
import visiopuce.service.FeuillePuceServiceImpl;
import visiopuce.service.PersonneServiceImpl;
import visiopuce.service.PrelevementServiceImpl;
import visiopuce.service.PuceServiceImpl;
import visiopuce.service.ReferentielServiceImpl;
import visiopuce.service.UtilisateurServiceImpl;
import visiopuce.service.document.DemandeFishDoc;
import visiopuce.ui.DossierEditorInput;
import visiopuce.ui.providers.CNVTableLabelProvider;
import visiopuce.ui.providers.FeuillePuceLabelProvider;
import visiopuce.ui.providers.MarquePuceLabelProvider;
import visiopuce.ui.providers.TypeLogicielLabelProvider;
import visiopuce.ui.providers.TypePuceLabelProvider;
import visiopuce.ui.providers.UtilisateurLabelProvider;

public class PuceTabItem implements IDossierTabItem<Puce> {

	private Puce puce;
	private TabItem puceTabItem;
	private boolean isModifiable;
	private Composite composite;
	private Text tParametres;
	private TableViewer tableCNV;
	private Text tRelecture;
	private Text tReunion;
	private FormattedText dTechnique;
	private FormattedText dReunion;
	private FormattedText dEnregistrement;
	private FormattedText dPreAna;
	private FormattedText dRelecture;

	private ComboViewer comboLogiciel;
	private ComboViewer comboFeuillePuce;
	private ComboViewer comboModelePuce;
	private ComboViewer comboMarquePuce;
	private ComboViewer comboAnnotateur;
	private ComboViewer comboSignataire;

	private Text tPreAna;

	private Group grpContrlesQualit;
	// private FormattedText[] tQC;
	private Text tFichierQc;
	private Button btnFichierQC;
	private HashMap<String, FormattedText> qcs = new HashMap<String, FormattedText>();
	private Button btnChoisirCettePuce;
	private ModifyListener modifyListener;
	private SelectionAdapter selectionListener;
	private Button btnSexeF;
	private Button btnSexeM;
	private Button btnSexeI;
	private Group grpRsultats;
	private Group grpConclusions;
	private Group grpFichierSegment;
	private Text tFichierSegement;
	private Button btnFichierSegement;
	private Button btnSup300;
	private Button btnCheckReunion;
	private Composite grpReunion;
	private boolean colonneExiste = false;
	private Button btnPranalyseTermineLe;
	private Button btnRelectureTermineLe;
	private Button btnAjouterCnv;
	private ScrolledComposite sc1;

	// These filter names are displayed to the user in the file dialog. Note
	// that
	// the inclusion of the actual extension in parentheses is optional, and
	// doesn't have any effect on which files are displayed.
	private static final String[] FILTER_NAMES = { "Fichier Excel (*.xls)", "Tous les fichiers (*.*)" };

	// These filter extensions are used to filter which files are displayed.
	private static final String[] FILTER_EXTS = { "*.xls", "*.*" };

	public PuceTabItem(TabFolder parent, int style, boolean modifiable) {
		puceTabItem = new TabItem(parent, style);
		modifyListener = new ModifyListener() {
			public void modifyText(ModifyEvent e) {
				if (((DossierEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()) != null) {
					((DossierEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()).setDirty(true);
				}
			}
		};
		selectionListener = new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				((DossierEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()).setDirty(true);
			}
		};
		this.isModifiable = modifiable;
		createContent();
	}

	public void createContent() {
		sc1 = new ScrolledComposite(puceTabItem.getParent(), SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
		composite = new Composite(sc1, SWT.NONE);
		sc1.getVerticalBar().setIncrement(10);
		sc1.getHorizontalBar().setIncrement(10);
		sc1.setContent(composite);
		sc1.setAlwaysShowScrollBars(true);
		puceTabItem.setControl(sc1);
		composite.setLayout(new GridLayout(1, false));

		btnChoisirCettePuce = new Button(composite, SWT.CHECK);
		btnChoisirCettePuce.setText("Choisir cette puce comme puce principale du dossier");

		Group groupInfo = new Group(composite, SWT.NONE);
		groupInfo.setText("Information sur la puce");
		groupInfo.setLayout(new GridLayout(4, false));

		Label lblDateDeLa = new Label(groupInfo, SWT.NONE);
		lblDateDeLa.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
		lblDateDeLa.setText("Date de la technique :");

		dTechnique = new FormattedText(groupInfo, SWT.BORDER);
		dTechnique.setFormatter(new DateFormatter("dd/MM/yyyy"));
		GridData gridData_dTechnique = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
		gridData_dTechnique.widthHint = 75;
		dTechnique.getControl().setLayoutData(gridData_dTechnique);

		Label lblMarqueDeLa = new Label(groupInfo, SWT.NONE);
		lblMarqueDeLa.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
		lblMarqueDeLa.setText("Marque de la puce :");

		comboMarquePuce = new ComboViewer(groupInfo, SWT.DROP_DOWN | SWT.READ_ONLY);
		comboMarquePuce.setContentProvider(ArrayContentProvider.getInstance());
		comboMarquePuce.setLabelProvider(new MarquePuceLabelProvider());
		comboMarquePuce.getCombo().setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
		comboMarquePuce.setInput(ReferentielServiceImpl.getInstance().getMarquePuce());
		comboMarquePuce.addSelectionChangedListener(new ISelectionChangedListener() {

			@Override
			public void selectionChanged(SelectionChangedEvent event) {
				ISelection selectionMarque = comboMarquePuce.getSelection();
				MarquePuce marquePuceSel = null;
				if (!selectionMarque.isEmpty()) {
					IStructuredSelection structuredSelection = (IStructuredSelection) selectionMarque;
					marquePuceSel = (MarquePuce) structuredSelection.getFirstElement();
					comboModelePuce.setInput(ReferentielServiceImpl.getInstance().getTypePuceByMarquePuce(marquePuceSel));
				}

			}

		});

		Label lblNumorDeLa = new Label(groupInfo, SWT.NONE);
		lblNumorDeLa.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
		lblNumorDeLa.setText("Num\u00E9ro de la feuille puce");

		comboFeuillePuce = new ComboViewer(groupInfo, SWT.DROP_DOWN | SWT.READ_ONLY);
		comboFeuillePuce.setContentProvider(ArrayContentProvider.getInstance());
		comboFeuillePuce.setLabelProvider(new FeuillePuceLabelProvider());
		comboFeuillePuce.getCombo().setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
		comboFeuillePuce.setInput(FeuillePuceServiceImpl.getInstance().getFeuillePuce());

		Label lblModleDeLa = new Label(groupInfo, SWT.NONE);
		lblModleDeLa.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
		lblModleDeLa.setText("Mod\u00E8le de la puce :");

		comboModelePuce = new ComboViewer(groupInfo, SWT.DROP_DOWN | SWT.READ_ONLY);
		comboModelePuce.setContentProvider(ArrayContentProvider.getInstance());
		comboModelePuce.setLabelProvider(new TypePuceLabelProvider());
		comboModelePuce.getCombo().setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
		comboModelePuce.addSelectionChangedListener(new ISelectionChangedListener() {

			@Override
			public void selectionChanged(SelectionChangedEvent event) {
				ISelection selectionMarque = comboModelePuce.getSelection();
				TypePuce typePuceSel = null;
				if (!selectionMarque.isEmpty()) {
					IStructuredSelection structuredSelection = (IStructuredSelection) selectionMarque;
					typePuceSel = (TypePuce) structuredSelection.getFirstElement();
					createQualiteGroup(typePuceSel);
				}

			}

		});

		Group groupParametre = new Group(composite, SWT.NONE);
		groupParametre.setText("Param\u00E8tres d'analyse");
		groupParametre.setLayout(new GridLayout(2, false));

		Label lblLogicielDanalyse = new Label(groupParametre, SWT.NONE);
		lblLogicielDanalyse.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
		lblLogicielDanalyse.setText("Logiciel d'analyse");

		comboLogiciel = new ComboViewer(groupParametre, SWT.DROP_DOWN | SWT.READ_ONLY);
		comboLogiciel.setContentProvider(ArrayContentProvider.getInstance());
		comboLogiciel.setLabelProvider(new TypeLogicielLabelProvider());
		comboLogiciel.getCombo().setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
		comboLogiciel.setInput(ReferentielServiceImpl.getInstance().getTypeLogiciels());

		Label lblParamtres = new Label(groupParametre, SWT.NONE);
		lblParamtres.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
		lblParamtres.setText("Param\u00E8tres");

		tParametres = new Text(groupParametre, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
		GridData gd_tParametres = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
		gd_tParametres.widthHint = 400;
		gd_tParametres.heightHint = 96;
		tParametres.setLayoutData(gd_tParametres);

		Label lblSexeDterminPar = new Label(groupParametre, SWT.NONE);
		lblSexeDterminPar.setText("Sexe d\u00E9termin\u00E9 par le logiciel");

		Group composite_1 = new Group(groupParametre, SWT.NONE);
		composite_1.setLayout(new FillLayout());

		btnSexeF = new Button(composite_1, SWT.RADIO);
		btnSexeF.setText("F");

		btnSexeM = new Button(composite_1, SWT.RADIO);
		btnSexeM.setText("M");

		btnSexeI = new Button(composite_1, SWT.RADIO);
		btnSexeI.setSelection(true);
		btnSexeI.setText("Non d\u00E9termin\u00E9");

		grpContrlesQualit = new Group(composite, SWT.NONE);
		grpContrlesQualit.setText("Contr\u00F4les qualit\u00E9");
		grpContrlesQualit.setLayout(new GridLayout(3, false));

		grpRsultats = new Group(composite, SWT.NONE);
		grpRsultats.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, true, true, 2, 1));
		grpRsultats.setText("R\u00E9sultats");
		grpRsultats.setLayout(new GridLayout(2, false));

		Label lblDateDenregistrementDes = new Label(grpRsultats, SWT.NONE);
		lblDateDenregistrementDes.setText("Date du scan : ");
		new Label(grpRsultats, SWT.NONE);

		dEnregistrement = new FormattedText(grpRsultats, SWT.BORDER);
		dEnregistrement.setFormatter(new DateFormatter("dd/MM/yyyy"));
		GridData gridData_dEnregistrement = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
		gridData_dEnregistrement.widthHint = 75;
		dEnregistrement.getControl().setLayoutData(gridData_dEnregistrement);

		tableCNV = new TableViewer(grpRsultats, SWT.BORDER | SWT.FULL_SELECTION);
		tableCNV.getTable().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
		tableCNV.getTable().setHeaderVisible(true);
		tableCNV.getTable().setLinesVisible(true);
		tableCNV.setContentProvider(ArrayContentProvider.getInstance());
		// tableCNV.addDoubleClickListener(new IDoubleClickListener() {
		//
		//
		// });

		tableCNV.getTable().addMouseListener(new MouseListener() {

			@Override
			public void mouseUp(MouseEvent e) {
				if (e.button == 3) {
					String result = "";
					Alteration a = null;

					StructuredSelection s = (StructuredSelection) tableCNV.getSelection();
					if (!s.isEmpty()) {
						a = (Alteration) s.getFirstElement();

						List<Annotation> anotations = AlterationServiceImpl.getInstance().getAnnotationsByAlteration(a.getIdAlteration());
						int i = 1;
						if (a.getAnnotationFinale() != null) {
							result += "ANNOTATION FINALE : " + a.getAnnotationFinale() + "\n";
						}
						for (Annotation annotation : anotations) {
							result += "ANNOTATION " + i + " : " + annotation.getCausale().getLibelle() + " : " + annotation.getTexte() + "\n";
							i++;
						}
					}
					ToolTipsDialog ttd = new ToolTipsDialog(Display.getCurrent().getActiveShell(), result);
					ttd.open();
				}

			}

			@Override
			public void mouseDown(MouseEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mouseDoubleClick(MouseEvent e) {
				Alteration a = null;

				StructuredSelection s = (StructuredSelection) tableCNV.getSelection();
				if (!s.isEmpty()) {
					a = (Alteration) s.getFirstElement();
					try {
						IEditorInput editorInput = new DossierEditorInput(PersonneServiceImpl.getInstance().getIdPersonneFromObject(a));

						PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().openEditor(editorInput, DossierEditor.ID, true, IWorkbenchPage.MATCH_INPUT);

						IEditorPart editeurActif = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
						if (editeurActif instanceof DossierEditor) {
							DossierEditor editeur = (DossierEditor) editeurActif;
							if (editeur.getCNVTabItems().containsKey(a.getPuce().getIdPuce())) {
								editeur.getTabFolder().setSelection(editeur.getCNVTabItems().get(a.getPuce().getIdPuce()).getTabItem());
							} else {
								editeur.addCNVTabItem(a);

							}
						}
					} catch (PartInitException ex) {
						// TODO Auto-generated catch block
						ex.printStackTrace();
					}
				}
			}

		});

		btnAjouterCnv = new Button(grpRsultats, SWT.NONE);
		btnAjouterCnv.setText("Ajouter un CNV manuellement");
		btnAjouterCnv.addSelectionListener(new SelectionListener() {

			@Override
			public void widgetSelected(SelectionEvent e) {
				if (!((DossierEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()).isModifiable()) {
					((DossierEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()).getItemModifier().notifyListeners(SWT.Selection, null);
				}
				if (((DossierEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()).isModifiable()) {
					Alteration newCNV = new Alteration();
					newCNV.setIdAlteration(0);
					newCNV.setPuce(puce);
					newCNV.setManuel(true);
					((DossierEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()).addCNVTabItem(newCNV);
				}
			}

			@Override
			public void widgetDefaultSelected(SelectionEvent e) {
				// TODO Auto-generated method stub

			}
		});
		Button btnCaryogramme = new Button(grpRsultats, SWT.NONE);
		btnCaryogramme.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, true, true, 1, 1));
		btnCaryogramme.setText("Voir le caryogramme");
		btnCaryogramme.setToolTipText("Fonction non encore disponible");
		btnCaryogramme.setEnabled(false);

		grpConclusions = new Group(composite, SWT.NONE);
		grpConclusions.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
		grpConclusions.setText("Conclusions");
		grpConclusions.setLayout(new GridLayout(2, false));

		Label lblAnnot = new Label(grpConclusions, SWT.NONE);
		lblAnnot.setText("Annotateur : ");

		comboAnnotateur = new ComboViewer(grpConclusions, SWT.DROP_DOWN | SWT.READ_ONLY);
		comboAnnotateur.setContentProvider(ArrayContentProvider.getInstance());
		comboAnnotateur.setLabelProvider(new UtilisateurLabelProvider());
		ArrayList<Utilisateur> listAnnotateurs = UtilisateurServiceImpl.getInstance().getAnnotateurs();
		comboAnnotateur.setInput(listAnnotateurs);
		comboAnnotateur.getCombo().setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));

		btnPranalyseTermineLe = new Button(grpConclusions, SWT.CHECK);
		btnPranalyseTermineLe.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
		btnPranalyseTermineLe.setBounds(0, 0, 55, 15);
		btnPranalyseTermineLe.setText("Préanalyse termniée le ");
		btnPranalyseTermineLe.addSelectionListener(new SelectionListener() {

			@Override
			public void widgetSelected(SelectionEvent e) {
				if (btnPranalyseTermineLe.getSelection()) {
					dPreAna.setValue(new Date());
				}
			}

			@Override
			public void widgetDefaultSelected(SelectionEvent e) {
				// TODO Auto-generated method stub

			}
		});

		dPreAna = new FormattedText(grpConclusions, SWT.BORDER);
		dPreAna.setFormatter(new DateFormatter("dd/MM/yyyy"));
		GridData gridData_dPreAna = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
		gridData_dPreAna.widthHint = 75;
		dPreAna.getControl().setLayoutData(gridData_dPreAna);

		tPreAna = new Text(grpConclusions, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
		GridData gd_tRelecture = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1);
		gd_tRelecture.widthHint = 557;
		gd_tRelecture.heightHint = 96;
		tPreAna.setLayoutData(gd_tRelecture);

		Label lblSign = new Label(grpConclusions, SWT.NONE);
		lblSign.setText("Signataire : ");

		comboSignataire = new ComboViewer(grpConclusions, SWT.DROP_DOWN | SWT.READ_ONLY);
		comboSignataire.setContentProvider(ArrayContentProvider.getInstance());
		comboSignataire.setLabelProvider(new UtilisateurLabelProvider());
		ArrayList<Utilisateur> listSignataires = UtilisateurServiceImpl.getInstance().getBiologisteByTypeAnalyse(3);
		comboSignataire.setInput(listSignataires);
		comboSignataire.getCombo().setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));

		btnRelectureTermineLe = new Button(grpConclusions, SWT.CHECK);
		btnRelectureTermineLe.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
		btnRelectureTermineLe.setBounds(0, 0, 55, 15);
		btnRelectureTermineLe.setText("Relecture terminée le ");
		btnRelectureTermineLe.addSelectionListener(new SelectionListener() {

			@Override
			public void widgetSelected(SelectionEvent e) {
				if (btnRelectureTermineLe.getSelection()) {
					dRelecture.setValue(new Date());
				}
			}

			@Override
			public void widgetDefaultSelected(SelectionEvent e) {
				// TODO Auto-generated method stub

			}
		});

		dRelecture = new FormattedText(grpConclusions, SWT.BORDER);
		dRelecture.setFormatter(new DateFormatter("dd/MM/yyyy"));
		GridData gridData_dRelecture = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
		gridData_dRelecture.widthHint = 75;
		dRelecture.getControl().setLayoutData(gridData_dRelecture);

		btnCheckReunion = new Button(grpConclusions, SWT.CHECK);
		btnCheckReunion.setText("Passer le dossier en réunion");
		btnCheckReunion.setSelection(false);

		tRelecture = new Text(grpConclusions, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
		GridData gd_text_3 = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1);
		gd_text_3.widthHint = 557;
		gd_text_3.heightHint = 96;
		tRelecture.setLayoutData(gd_text_3);

		grpReunion = new Composite(grpConclusions, SWT.NONE);
		grpReunion.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 2, 1));
		grpReunion.setLayout(new GridLayout(2, false));

		Label lblRunionLe = new Label(grpReunion, SWT.NONE);
		lblRunionLe.setText("R\u00E9union le ");

		dReunion = new FormattedText(grpReunion, SWT.BORDER);
		dReunion.setFormatter(new DateFormatter("dd/MM/yyyy"));
		GridData gridData_dReunion = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
		gridData_dReunion.widthHint = 75;
		dReunion.getControl().setLayoutData(gridData_dReunion);

		tReunion = new Text(grpReunion, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
		GridData gd_tReunion = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1);
		gd_tReunion.widthHint = 557;
		gd_tReunion.heightHint = 96;
		tReunion.setLayoutData(gd_tReunion);

		grpFichierSegment = new Group(composite, SWT.NONE);
		grpFichierSegment.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
		grpFichierSegment.setText("Téléchargement des réusltats");
		grpFichierSegment.setLayout(new GridLayout(2, false));

		Label lblSup300 = new Label(grpFichierSegment, SWT.NONE);
		lblSup300.setText("Ne télécharger que les CNV sup à 300kb (pour les puces Agilent)");
		btnSup300 = new Button(grpFichierSegment, SWT.CHECK);
		btnSup300.setSelection(false);

		tFichierSegement = new Text(grpFichierSegment, SWT.SINGLE | SWT.BORDER);
		GridData gd = new GridData(GridData.FILL_BOTH);
		gd.grabExcessHorizontalSpace = true;
		gd.horizontalAlignment = GridData.FILL;
		tFichierSegement.setLayoutData(gd);

		btnFichierSegement = new Button(grpFichierSegment, SWT.NONE);
		btnFichierSegement.setText("...");

		grpRsultats.setVisible(false);
		((GridData) grpRsultats.getLayoutData()).exclude = true;
		grpConclusions.setVisible(false);
		((GridData) grpConclusions.getLayoutData()).exclude = true;
		grpReunion.setVisible(false);
		((GridData) grpReunion.getLayoutData()).exclude = true;
		grpFichierSegment.setVisible(true);
		((GridData) grpFichierSegment.getLayoutData()).exclude = false;

		composite.pack();
		sc1.redraw();
		setModifiable(isModifiable);
		puceTabItem.getParent().setSelection(puceTabItem);
	}

	protected void createQualiteGroup(TypePuce typePuce) {
		List<TypeQC> typeQCs = ReferentielServiceImpl.getInstance().getTypeQCByTypePuce(typePuce);
		int i = 0;
		for (TypeQC typeQC : typeQCs) {
			if (typeQC.getLibelle() != "fichier qc") {
				if (qcs.get(typeQC.getLibelle()) == null) {
					Label lQC = new Label(grpContrlesQualit, SWT.NONE);
					lQC.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
					lQC.setText(typeQC.getLibelle());

					FormattedText tQC = new FormattedText(grpContrlesQualit, SWT.BORDER);
					GridData gridData_tqc = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
					gridData_tqc.widthHint = 150;
					tQC.getControl().setLayoutData(gridData_tqc);
					tQC.setFormatter(new DoubleFormatter(Locale.US));
					tQC.getControl().addModifyListener(modifyListener);
					if (puce.getTypePuce() != null) {
						ControleQualite qc = PuceServiceImpl.getInstance().getQCByPuceTypeQc(puce, typeQC.getLibelle());
						if (qc != null) {
							tQC.setValue(qc.getValeur());
							if (ApplicationContexte.isOut(typeQC.getLibelle(), qc.getValeur())) {
								tQC.getControl().setBackground(SWTResourceManager.getColor(255, 99, 71));
							} else {
								tQC.getControl().setBackground(SWTResourceManager.getColor(144, 238, 144));
							}
						}
					}

					qcs.put(typeQC.getLibelle(), tQC);

					i++;

					if (typeQC.getUnite() != null) {
						Label unite = new Label(grpContrlesQualit, SWT.NONE);
						unite.setText(typeQC.getUnite());
					}
				}
			} else {

				Label lFichier = new Label(grpContrlesQualit, SWT.NONE);
				lFichier.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
				lFichier.setText("Fichier QC");

				tFichierQc = new Text(grpContrlesQualit, SWT.SINGLE | SWT.BORDER);
				GridData gd = new GridData(GridData.FILL_BOTH);
				gd.grabExcessHorizontalSpace = true;
				gd.horizontalAlignment = GridData.FILL;
				tFichierQc.setLayoutData(gd);

				btnFichierQC = new Button(grpContrlesQualit, SWT.NONE);
				btnFichierQC.setText("...");
				btnFichierQC.addSelectionListener(new SelectionListener() {
					public void widgetDefaultSelected(SelectionEvent e) {
					}

					public void widgetSelected(SelectionEvent e) {
						FileDialog dlg = new FileDialog(btnFichierQC.getShell(), SWT.OPEN);
						dlg.setFilterNames(FILTER_NAMES);
						dlg.setFilterExtensions(FILTER_EXTS);
						dlg.setText("Télécharger les données");
						String path = dlg.open();
						if (path == null)
							return;
						tFichierQc.setText(path);
					}
				});
			}
		}

		composite.pack();
		sc1.redraw();

	}

	private void addDirtyListener() {

		tParametres.addModifyListener(modifyListener);
		tRelecture.addModifyListener(modifyListener);
		tReunion.addModifyListener(modifyListener);
		dTechnique.getControl().addModifyListener(modifyListener);
		dReunion.getControl().addModifyListener(modifyListener);
		dEnregistrement.getControl().addModifyListener(modifyListener);
		btnPranalyseTermineLe.addSelectionListener(selectionListener);
		btnRelectureTermineLe.addSelectionListener(selectionListener);

		btnSexeI.addSelectionListener(selectionListener);
		btnSexeM.addSelectionListener(selectionListener);
		btnSexeF.addSelectionListener(selectionListener);

		comboLogiciel.getCombo().addModifyListener(modifyListener);
		comboFeuillePuce.getCombo().addModifyListener(modifyListener);
		comboModelePuce.getCombo().addModifyListener(modifyListener);
		comboMarquePuce.getCombo().addModifyListener(modifyListener);
		comboAnnotateur.getCombo().addModifyListener(modifyListener);
		comboSignataire.getCombo().addModifyListener(modifyListener);

		if (tPreAna != null) {
			tPreAna.addModifyListener(modifyListener);
		}
		if (dPreAna != null) {
			dPreAna.getControl().addModifyListener(modifyListener);
		}
		if (dRelecture != null) {
			dRelecture.getControl().addModifyListener(modifyListener);
		}
		if (tFichierQc != null) {
			tFichierQc.addModifyListener(modifyListener);
		}
		if (btnFichierQC != null) {
			btnFichierQC.addSelectionListener(selectionListener);
		}
		if (tFichierSegement != null) {
			tFichierSegement.addModifyListener(modifyListener);
		}
		if (btnFichierSegement != null) {
			btnFichierSegement.addSelectionListener(selectionListener);
		}
		if (btnSup300 != null) {
			btnSup300.addSelectionListener(selectionListener);
		}
		for (Entry<String, FormattedText> tQc : qcs.entrySet()) {
			if (tQc != null) {
				tQc.getValue().getControl().addModifyListener(modifyListener);
			}
		}
		btnChoisirCettePuce.addSelectionListener(selectionListener);
		btnCheckReunion.addSelectionListener(selectionListener);
	}

	private void removeDirtyListener() {
		tParametres.removeModifyListener(modifyListener);
		tRelecture.removeModifyListener(modifyListener);
		tReunion.removeModifyListener(modifyListener);
		dTechnique.getControl().removeModifyListener(modifyListener);
		dReunion.getControl().removeModifyListener(modifyListener);
		dEnregistrement.getControl().removeModifyListener(modifyListener);
		btnPranalyseTermineLe.removeSelectionListener(selectionListener);
		btnRelectureTermineLe.removeSelectionListener(selectionListener);

		btnSexeI.removeSelectionListener(selectionListener);
		btnSexeM.removeSelectionListener(selectionListener);
		btnSexeF.removeSelectionListener(selectionListener);

		comboLogiciel.getCombo().removeModifyListener(modifyListener);
		comboFeuillePuce.getCombo().removeModifyListener(modifyListener);
		comboModelePuce.getCombo().removeModifyListener(modifyListener);
		comboMarquePuce.getCombo().removeModifyListener(modifyListener);
		comboAnnotateur.getCombo().removeModifyListener(modifyListener);
		comboSignataire.getCombo().removeModifyListener(modifyListener);
		if (tPreAna != null) {
			tPreAna.removeModifyListener(modifyListener);
		}
		if (dPreAna != null) {
			dPreAna.getControl().removeModifyListener(modifyListener);
		}
		if (dRelecture != null) {
			dRelecture.getControl().removeModifyListener(modifyListener);
		}
		if (tFichierQc != null) {
			tFichierQc.removeModifyListener(modifyListener);
		}
		if (btnFichierQC != null) {
			btnFichierQC.removeSelectionListener(selectionListener);
		}
		if (tFichierSegement != null) {
			tFichierSegement.removeModifyListener(modifyListener);
		}
		if (btnFichierSegement != null) {
			btnFichierSegement.removeSelectionListener(selectionListener);
		}
		if (btnSup300 != null) {
			btnSup300.removeSelectionListener(selectionListener);
		}
		for (Entry<String, FormattedText> tQc : qcs.entrySet()) {
			if (tQc != null) {
				tQc.getValue().getControl().removeModifyListener(modifyListener);
			}
		}
		btnChoisirCettePuce.removeSelectionListener(selectionListener);
		btnCheckReunion.removeSelectionListener(selectionListener);
	}

	public TabItem getTabItem() {
		return puceTabItem;
	}

	public boolean isModifiable() {
		return isModifiable;
	}

	public Puce recupererObjet() {
		if (verifierChamp()) {

			// comboModelePuce.getCombo().setEnabled(false);

			//
			// tFichierQc.setEnabled(false);
			// btnFichierQC.setEnabled(false);
			// for(Entry<String, FormattedText> tQc : qcs.entrySet()) {
			// tQc.getValue().getControl().setEnabled(false);
			// }
			// btnChoisirCettePuce.setEnabled(false);
			SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
			Date datedujour = new Date();
			String auteur = "(" + ApplicationContexte.getInstance().getUtilisateur().getPrenom() + " " + ApplicationContexte.getInstance().getUtilisateur().getNom() + " le " + formatter.format(datedujour) + ")";
			if (!tParametres.getText().equals(puce.getParametres()) && !tParametres.getText().isEmpty()) {
				puce.setParametres(tParametres.getText());
			}
			if (!tRelecture.getText().equals(puce.getCommentaireSignataires()) && !tRelecture.getText().isEmpty()) {
				puce.setCommentaireSignataires(tRelecture.getText() + auteur);
			}
			if (!tReunion.getText().equals(puce.getConclusionReunion()) && !tReunion.getText().isEmpty()) {
				puce.setConclusionReunion(tReunion.getText() + auteur);
			}
			if (!tPreAna.getText().equals(puce.getCommentaireAnnotateur()) && !tPreAna.getText().isEmpty()) {
				puce.setCommentaireAnnotateur(tPreAna.getText() + auteur);
			}
			if (btnSexeI.getSelection()) {
				puce.setSexePuce("I");
			}
			if (btnSexeM.getSelection()) {
				puce.setSexePuce("M");
			}
			if (btnSexeF.getSelection()) {
				puce.setSexePuce("F");
			}

			puce.setDateAnnotation((Date) dPreAna.getValue());
			puce.setDateRelecture((Date) dRelecture.getValue());
			puce.setDateReunion((Date) dReunion.getValue());
			puce.setDateScan((Date) dEnregistrement.getValue());

			puce.setPrincipale(btnChoisirCettePuce.getSelection());

			ISelection selectionFeuillePuce = comboFeuillePuce.getSelection();
			if (!selectionFeuillePuce.isEmpty()) {
				IStructuredSelection structuredSelection = (IStructuredSelection) selectionFeuillePuce;
				puce.setFeuillePuce((FeuillePuce) structuredSelection.getFirstElement());
			}

			ISelection selectionTypeLogiciel = comboLogiciel.getSelection();
			if (!selectionTypeLogiciel.isEmpty()) {
				IStructuredSelection structuredSelection = (IStructuredSelection) selectionTypeLogiciel;
				puce.setTypeLogiciel((TypeLogiciel) structuredSelection.getFirstElement());
			}

			ISelection selectionTypePuce = comboModelePuce.getSelection();
			if (!selectionTypePuce.isEmpty()) {
				IStructuredSelection structuredSelection = (IStructuredSelection) selectionTypePuce;
				puce.setTypePuce((TypePuce) structuredSelection.getFirstElement());
			}

			ISelection selectionAnnotateur = comboAnnotateur.getSelection();
			if (!selectionAnnotateur.isEmpty()) {
				IStructuredSelection structuredSelection = (IStructuredSelection) selectionAnnotateur;
				Utilisateur anot = (Utilisateur) structuredSelection.getFirstElement();
				if (anot.getIdUtilisateur() != null) {
					puce.setAnnotateur(anot);
				} else {
					puce.setAnnotateur(null);
				}
			}

			ISelection selectionSignataire = comboSignataire.getSelection();
			if (!selectionSignataire.isEmpty()) {
				IStructuredSelection structuredSelection = (IStructuredSelection) selectionSignataire;
				Utilisateur sign = (Utilisateur) structuredSelection.getFirstElement();
				if (sign.getIdUtilisateur() != null) {
					puce.setSignataire(sign);
				} else {
					puce.setSignataire(null);
				}
			}

			if (puce.getTypePuce() != null) {
				puce.setQcs(new ArrayList<ControleQualite>());
				List<TypeQC> tqcs = ReferentielServiceImpl.getInstance().getTypeQCByTypePuce(puce.getTypePuce());
				for (TypeQC typeQC : tqcs) {
					for (Entry<String, FormattedText> txtQc : qcs.entrySet()) {
						if (txtQc != null && txtQc.getKey().equals(typeQC.getLibelle())) {
							ControleQualite qc = PuceServiceImpl.getInstance().getQCByPuceTypeQc(puce, txtQc.getKey());
							if (qc == null) {
								qc = new ControleQualite();
								qc.setPuce(puce);
								qc.setIdControleQC(0);
								qc.setTypeQC(typeQC);
							}
							qc.setValeur((Double) txtQc.getValue().getValue());
							puce.addQc(qc);
						}
					}
				}

			}
		}
		puce.setaPasserEnReunion(btnCheckReunion.getSelection());
		if (dReunion != null && dReunion.getValue() != null) {
			boolean verifFish = false;
			List<Alteration> alterations = AlterationServiceImpl.getInstance().getAlterationAVerif(puce.getIdPuce());
			for (Alteration alteration : alterations) {
				if (alteration.isaVerifFish()) {
					verifFish = true;
					break;
				}
			}

			if (verifFish) {
				if (MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "Création de la demande de FISH", "Une modification par FISH est demandée, souhaitez-vous créer la fiche FISH ?")) {
					DemandeFishDoc demandeFish = new DemandeFishDoc();
					demandeFish.createDocument(puce);
				}
			}

		}
		return puce;
	}

	public void remplir(final Puce puce) {
		removeDirtyListener();
		this.puce = puce;
		btnCheckReunion.setSelection(puce.isaPasserEnReunion());
		btnPranalyseTermineLe.setSelection(false);
		btnRelectureTermineLe.setSelection(false);
		if (puce.getIdPuce() != 0 && puce.getTypePuce() != null) {
			if (puce.getDateScan() != null) {
				grpRsultats.setVisible(true);
				((GridData) grpRsultats.getLayoutData()).exclude = false;
				grpReunion.setVisible(false);
				((GridData) grpReunion.getLayoutData()).exclude = true;
				grpConclusions.setVisible(true);
				((GridData) grpConclusions.getLayoutData()).exclude = false;
				grpFichierSegment.setVisible(false);
				((GridData) grpFichierSegment.getLayoutData()).exclude = true;
			
			} else {
				grpRsultats.setVisible(false);
				((GridData) grpRsultats.getLayoutData()).exclude = true;
				grpConclusions.setVisible(false);
				((GridData) grpConclusions.getLayoutData()).exclude = true;
				grpFichierSegment.setVisible(true);
				((GridData) grpFichierSegment.getLayoutData()).exclude = false;
				if (puce.getConclusionReunion() != null || puce.isaPasserEnReunion()) {
					grpReunion.setVisible(false);
					((GridData) grpReunion.getLayoutData()).exclude = true;
				}
				
				btnFichierSegement.addSelectionListener(new SelectionListener() {

					public void widgetDefaultSelected(SelectionEvent e) {
					}

					public void widgetSelected(SelectionEvent e) {
						FileDialog dlg = new FileDialog(btnFichierSegement.getShell(), SWT.NONE);
						dlg.setFilterNames(FILTER_NAMES);
						dlg.setFilterExtensions(FILTER_EXTS);
						dlg.setText("Télécharger les données");
						String path = dlg.open();
						if (path == null)
							return;
						tFichierSegement.setText(path);
						String message = AlterationServiceImpl.getInstance().telechargerFichierSegment(puce, path, btnSup300.getSelection());
						MessageDialog.openInformation(Display.getCurrent().getActiveShell(), "Téléchargement du fichier", message);
						remplir(puce);

					}
				});
			
			}
			puceTabItem.setText(puce.getTypePuce().getLibelle());
			if (puce.getParametres() != null) {
				tParametres.setText(puce.getParametres());
			}
			btnChoisirCettePuce.setSelection(PuceServiceImpl.getInstance().isPucePrincipale(puce.getIdPuce()));

			List<Alteration> alterations = AlterationServiceImpl.getInstance().findAllByidPuce(puce.getIdPuce());
			createColumns();
			tableCNV.setInput(alterations);
			if (puce.getCommentaireAnnotateur() != null) {
				tPreAna.setText(puce.getCommentaireAnnotateur());
			}
			if (puce.getCommentaireSignataires() != null) {
				tRelecture.setText(puce.getCommentaireSignataires());
			}
			if (puce.getConclusionReunion() != null) {
				tReunion.setText(puce.getConclusionReunion());
			}
			if (puce.getFeuillePuce() != null && puce.getFeuillePuce().getDateEnvoi() != null) {
				dTechnique.setValue(puce.getFeuillePuce().getDateEnvoi());
			}
			if (puce.getDateReunion() != null) {
				dReunion.setValue(puce.getDateReunion());
				btnCheckReunion.setSelection(true);
				grpReunion.setVisible(true);
				((GridData) grpReunion.getLayoutData()).exclude = false;
			}
			if (btnCheckReunion.getSelection()) {
				grpReunion.setVisible(true);
				((GridData) grpReunion.getLayoutData()).exclude = false;
			}

			if (puce.getDateScan() != null) {
				dEnregistrement.setValue(puce.getDateScan());
			}
			if (puce.getDateAnnotation() != null) {
				dPreAna.setValue(puce.getDateAnnotation());
				btnPranalyseTermineLe.setSelection(true);
			}
			if (puce.getDateRelecture() != null) {
				dRelecture.setValue(puce.getDateRelecture());
				btnRelectureTermineLe.setSelection(true);
			}
			if (puce.getTypePuce().getMarquePuce() != null) {
				comboModelePuce.setInput(ReferentielServiceImpl.getInstance().getTypePuceByMarquePuce(puce.getTypePuce().getMarquePuce()));
				comboMarquePuce.setInput(ReferentielServiceImpl.getInstance().getMarquePuce());
				comboMarquePuce.setSelection(new StructuredSelection(puce.getTypePuce().getMarquePuce()), true);

			}
			if (puce.getSexePuce() != null) {
				if (puce.getSexePuce().equals("I")) {
					btnSexeI.setSelection(true);
					btnSexeM.setSelection(false);
					btnSexeF.setSelection(false);
				}
				if (puce.getSexePuce().equals("M")) {
					btnSexeI.setSelection(false);
					btnSexeM.setSelection(true);
					btnSexeF.setSelection(false);
				}
				if (puce.getSexePuce().equals("F")) {
					btnSexeI.setSelection(false);
					btnSexeM.setSelection(false);
					btnSexeF.setSelection(true);
				}
			} else {
				btnSexeI.setSelection(true);
			}
			if (puce.getTypeLogiciel() != null) {
				comboLogiciel.setSelection(new StructuredSelection(puce.getTypeLogiciel()), true);
			}
			if (puce.getAnnotateur() != null) {
				comboAnnotateur.setSelection(new StructuredSelection(puce.getAnnotateur()), true);
			}
			if (puce.getSignataire() != null) {
				comboSignataire.setSelection(new StructuredSelection(puce.getSignataire()), true);
			}
			if (puce.getTypePuce() != null) {
				comboModelePuce.setSelection(new StructuredSelection(puce.getTypePuce()), true);
				for (String libelleTypeQc : qcs.keySet()) {
					ControleQualite qc = PuceServiceImpl.getInstance().getQCByPuceTypeQc(puce, libelleTypeQc);
					if (qc != null) {
						qcs.get(libelleTypeQc).setValue(qc.getValeur());
						if (ApplicationContexte.isOut(libelleTypeQc, qc.getValeur())) {
							qcs.get(libelleTypeQc).getControl().setBackground(SWTResourceManager.getColor(255, 99, 71));
						} else {
							qcs.get(libelleTypeQc).getControl().setBackground(SWTResourceManager.getColor(144, 238, 144));
						}
					}
				}
			}
			if (puce.getFeuillePuce() != null) {
				comboFeuillePuce.setInput(FeuillePuceServiceImpl.getInstance().getFeuillePuce());
				comboFeuillePuce.setSelection(new StructuredSelection(puce.getFeuillePuce()), true);
			}

			// private FormattedText[] tQC;
			// private Text tFichierQc;
			// private Button btnFichierQC;
		} else {
			puceTabItem.setText("nouvelle puce");
			grpRsultats.setVisible(false);
			grpConclusions.setVisible(false);
			grpFichierSegment.setVisible(false);
		
		}
		// btnDossierUrgent.setSelection(analyse.isUrgent());
		// if (analyse.getRaisonUrgent() != null) {
		// tUrgent.setText(analyse.getRaisonUrgent());
		// }
		// if (analyse.getIndication() != null) {
		// comboTypeIndication.setSelection(new
		// StructuredSelection(analyse.getIndication()), true);
		// }
		// if (analyse.getPrescripteur() != null) {
		// comboPrescripteur.setSelection(new
		// StructuredSelection(analyse.getPrescripteur()), true);
		// }
		// if (analyse.getTypeAnalyse() != null) {
		// comboTypeAnalyse.setSelection(new
		// StructuredSelection(analyse.getTypeAnalyse() ), true);
		// }

		
		setModifiable(isModifiable);
		composite.pack();
		sc1.redraw();
		addDirtyListener();
	}

	public void setModifiable(boolean isModifiable) {
		removeDirtyListener();
		this.isModifiable = isModifiable;
		dTechnique.getControl().setEnabled(false);
		tFichierSegement.setEditable(false);

		if (!isModifiable) {
			tParametres.setEditable(false);
			tRelecture.setEditable(false);
			tReunion.setEditable(false);
			tPreAna.setEditable(false);

			dReunion.getControl().setEditable(false);
			dEnregistrement.getControl().setEditable(false);
			dPreAna.getControl().setEditable(false);
			dRelecture.getControl().setEditable(false);
			btnRelectureTermineLe.setEnabled(false);
			btnPranalyseTermineLe.setEnabled(false);

			comboLogiciel.getCombo().setEnabled(false);
			comboFeuillePuce.getCombo().setEnabled(false);
			comboModelePuce.getCombo().setEnabled(false);
			comboMarquePuce.getCombo().setEnabled(false);
			comboAnnotateur.getCombo().setEnabled(false);
			comboSignataire.getCombo().setEnabled(false);

			btnSexeI.setEnabled(false);
			btnSexeM.setEnabled(false);
			btnSexeF.setEnabled(false);
			btnFichierSegement.setEnabled(false);

			if (tFichierQc != null) {
				tFichierQc.setEditable(false);
			}
			if (btnFichierQC != null) {
				btnFichierQC.setEnabled(false);
			}
			for (Entry<String, FormattedText> tQc : qcs.entrySet()) {
				if (tQc != null) {
					tQc.getValue().getControl().setEditable(false);
				}
			}
			btnChoisirCettePuce.setEnabled(false);
			btnCheckReunion.setEnabled(false);
			btnAjouterCnv.setEnabled(false);
		} else {
			tParametres.setEditable(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "tParametresPuce"));
			tReunion.setEditable(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "tReunion"));
			btnAjouterCnv.setEnabled(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "alteration"));
			if (puce != null) {
				tRelecture.setEditable(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "tRelecture") && puce.getSignataire() != null && puce.getSignataire().equals(ApplicationContexte.getInstance().getUtilisateur()));
				tPreAna.setEditable(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "tPreAna") && puce.getAnnotateur() != null && puce.getAnnotateur().equals(ApplicationContexte.getInstance().getUtilisateur()));
				btnPranalyseTermineLe.setEnabled(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "dPreAna") && puce.getAnnotateur() != null && puce.getAnnotateur().equals(ApplicationContexte.getInstance().getUtilisateur()));
				btnRelectureTermineLe.setEnabled(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "dRelecture") && puce.getSignataire() != null && puce.getSignataire().equals(ApplicationContexte.getInstance().getUtilisateur()));
				btnCheckReunion.setEnabled(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "btnCheckReunion") && puce.getSignataire() != null && puce.getSignataire().equals(ApplicationContexte.getInstance().getUtilisateur()));
			} else {
				btnCheckReunion.setEnabled(false);
				tRelecture.setEditable(false);
				tPreAna.setEditable(false);
				btnRelectureTermineLe.setEnabled(false);
				btnPranalyseTermineLe.setEnabled(false);
			}

			dReunion.getControl().setEditable(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "dReunion"));
			dEnregistrement.getControl().setEditable(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "dEnregistrement"));

			boolean droitSexePuce = DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "btnSexePuce");
			btnSexeI.setEnabled(droitSexePuce);
			btnSexeM.setEnabled(droitSexePuce);
			btnSexeF.setEnabled(droitSexePuce);

			comboLogiciel.getCombo().setEnabled(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "comboLogiciel"));
			comboFeuillePuce.getCombo().setEnabled(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "comboFeuillePuce"));
			comboModelePuce.getCombo().setEnabled(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "comboModelePuce"));
			comboMarquePuce.getCombo().setEnabled(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "comboMarquePuce"));
			comboAnnotateur.getCombo().setEnabled(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "comboAnnotateur"));
			comboSignataire.getCombo().setEnabled(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "comboSignataire"));

			if (puce != null && puce.getIdPuce() != 0) {
				btnSup300.setEnabled(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "btnFichierSegement"));
				btnFichierSegement.setEnabled(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "btnFichierSegement"));
			} else {
				btnSup300.setEnabled(false);
				btnFichierSegement.setEnabled(false);
			}

			if (tFichierQc != null) {
				tFichierQc.setEditable(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "tFichierQc"));
			}
			if (btnFichierQC != null) {
				btnFichierQC.setEnabled(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "btnFichierQC"));
			}
			for (Entry<String, FormattedText> tQc : qcs.entrySet()) {
				if (tQc != null) {
					tQc.getValue().getControl().setEditable(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "qcs"));
				}
			}

			btnChoisirCettePuce.setEnabled(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "btnChoisirCettePuce"));
			addDirtyListener();
		}

	}

	public boolean verifierChamp() {
		// ISelection selectionMedecin = comboPrescripteur.getSelection();
		// if (selectionMedecin.isEmpty()) {
		// MessageDialog.openError(Display.getCurrent().getActiveShell(),
		// "Champs obligatoire manquant", "Prescripteur manquant");
		// return false;
		// }

		return true;
	}

	public Puce getPuce() {
		return puce;
	}

	private void createColumns() {
		if (!colonneExiste) {
			String[] titles = new String[] { "Chr", "bande", "taille (kb)", "Début", "Fin", "Nb copies", "log2R", "Nb Mq.", "Nb gènes", "CNPc", "FISH", "qPCR", "Enr." };
			int[] bounds = { 30, 50, 45, 150, 150, 30, 40, 40, 40, 50, 110, 110, 50 };

			TableViewerColumn column1 = createTableViewerColumn(titles[0], bounds[0], 0);
			TableViewerColumn column2 = createTableViewerColumn(titles[1], bounds[1], 1);
			TableViewerColumn column3 = createTableViewerColumn(titles[2], bounds[2], 2);
			TableViewerColumn column4 = createTableViewerColumn(titles[3], bounds[3], 3);
			TableViewerColumn column5 = createTableViewerColumn(titles[4], bounds[4], 4);
			TableViewerColumn column6 = createTableViewerColumn(titles[5], bounds[5], 5);
			TableViewerColumn column7 = createTableViewerColumn(titles[6], bounds[6], 6);
			TableViewerColumn column8 = createTableViewerColumn(titles[7], bounds[7], 7);
			TableViewerColumn column9 = createTableViewerColumn(titles[8], bounds[8], 8);
			TableViewerColumn column10 = createTableViewerColumn(titles[9], bounds[9], 9);
			TableViewerColumn column11 = createTableViewerColumn(titles[10], bounds[10], 10);
			TableViewerColumn column12 = createTableViewerColumn(titles[11], bounds[11], 11);
			TableViewerColumn column13 = createTableViewerColumn(titles[12], bounds[12], 12);
			colonneExiste = true;
		}

	}

	private TableViewerColumn createTableViewerColumn(String header, int width, int idx) {
		TableViewerColumn column = new TableViewerColumn(tableCNV, SWT.LEFT, idx);
		column.getColumn().setText(header);
		column.getColumn().setWidth(width);
		column.getColumn().setResizable(true);
		column.getColumn().setMoveable(true);
		column.setLabelProvider(new CNVTableLabelProvider(idx, puce.getTypePuce().getIdTypePuce()));
		return column;
	}
}
